tmux server管理着多个session,而一个session可以被多个tmux client连接。 这些tmux client通过一个 UNIX Damain Socket 文件来跟tmux server通讯.
因此,要想让多个用户共享tmux session,只需要指定这些用户调用的tmux client连接上同一个Socket文件即可。
而这可以分成两种情况:
- 多个用户使用同一个操作系统帐号
- 多个用户使用不同的操作系统帐号
这两者的区别主要在Socket文件的权限问题
在多个用户使用同一个操作系统帐号时,不存在用户访问Socket文件的权限问题,因此操作起来特别简单,只需要多个用户指定同一个tmux session名字就行了
- 第一个用户新建一个tmux session
tmux new-session -s mysession
- 第二个用户连接上这个tmux session即可
tmux attach-session -t mysession
当多个用户使用不同帐号登录操作系统时,就存在访问Socket文件的权限问题了。
那么 tmux server 使用的 Socket 文件在哪里呢?
根据 tmux manual page 的说法,tmux的 socket 文件默认为 /tmp/
或 ${TMUX_TMPDIR}/
目录下的 default
文件。
但当使用 -L socket-name
指定socket-name时,该socket文件为 /tmp/
或 ${TMUX_TMPDIR}/
目录下的 ${socket-name}
文件.
甚至,我们可以通过 -S socket-path
的方法来直接指定 Socket 文件的路径。
为了让多个用户在不同帐号间共享tmux session,可以这么做:
- 第一个用户指定一个Socket文件来创建tmux session
tmux -S /tmp/shared new-session -s shared
这时你会看到在
/tmp/
目录下多了一个shared
文件ls -l /tmp/shared
srwxrwx--- 1 lujun9972 lujun9972 0 8月 19 23:25 /tmp/shared
你会发现user和group都有权限对其进行读写
- 为了让其他账户能够访问socket文件,有两种方法
第一种方法是让这些账户处于同一个用户组(例如joint)中,再将socket文件的宿组改为那个用户组(即joint组)
usermod -a -G joint user1 usermod -a -G joint user2 chown :joint /tmp/shared
另一种方法当然就是让socket文件 other 也能访问啦
chmod 777 /tmp/shared
若其他用户只是查看 tmux session 而不做输入的话,也可以不赋予写权限
chmod 775 /tmp/shared
- 其他用户可以通过这个 socket 文件连接上同一个 session 了
tmux -S /tmp/shared attach-session -t shared
或者
tmux -S /tmp/shared attach-session -t shared -r